package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Target:用于指明当前注解可以被应用的位置，具体位置呦ElementType表示
 * ElementType.TYPE:注解可以被应用再类上，接口上
 * ElementType.FIELD:注解可以被应用在属性上
 * ElementType.METHOD:注解可以被应用在方法上
 * ElementType.CONSTRUCTOR:注解可以被应用在构造方法上
 * ElementType.PARAMETER:注解可以被应用在参数上
 *   例如:当前注解只能在类上使用
 *        @Target(ElementType.TYPE)
 *   例如:当前注解可以在类上及属性上使用(数组形式指定)
 *        @Target(｛ElementType.TYPE,ElementType.FIELD｝)
 *
 * @Retention:用于指明当前注解被保留的时间长短，具体形式由RetentionPolicy表示
 *    RetentionPolicy.SOURCE:注解保留在源文件中，不保留在class字节码文件中
 *    RetentionPolicy.CLASS:注解保留在class字节码文件中(默认保留级别)
 *    RetentionPolicy.RUNTIME:注解保留在class字节码文件中，在运行期也保留，可以通过反射获得注解信息
 */
@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {

}
